package interfaces;

import agenda.*;

import java.util.*;

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.xml.transform.OutputKeys;

public class IContatos extends JFrame{

	public static Usuario user;

	//Buttons
	private JButton add = new JButton("Add");
	private JButton editar = new JButton("Editar");
	private JButton remover = new JButton("Remover");
	private JButton voltar = new JButton("Voltar");

	//Table
	private JTable tabela;
	private DefaultTableModel desenho;

	private JScrollPane scrollTabela;

	private CriaContato criaContato;

	public IContatos() {
		super("Contatos");
		this.setSize(700,550);
		this.setResizable(false);
		this.setDefaultCloseOperation(HIDE_ON_CLOSE);
		this.setLocation(150,70);
		this.setVisible(true);

		FlowLayout layout = new FlowLayout(FlowLayout.LEFT);

		JPanel pane = new JPanel(layout);
		pane.setSize(700,550);
		pane.setVisible(true);

		add.setBounds(5, 10, 90, 70);
		add.setHorizontalTextPosition(SwingConstants.CENTER);
		add.setVerticalAlignment(SwingConstants.TOP);
		add.setVerticalTextPosition(SwingConstants.BOTTOM);
		add.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				addActionPerformed(e);
			}
		});
		add.setIcon(new
				ImageIcon("src/images/add.png"));
		add.setBackground(Color.WHITE);

		editar.setBounds(95, 10, 90, 70);
		editar.setHorizontalTextPosition(SwingConstants.CENTER);
		editar.setVerticalAlignment(SwingConstants.TOP);
		editar.setVerticalTextPosition(SwingConstants.BOTTOM);
		editar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				editarActionPerformed(e);
			}
		});
		editar.setIcon(new
				ImageIcon("src/images/edituser.png"));
		editar.setBackground(Color.WHITE);


		remover.setBounds(185, 10, 90, 70);
		remover.setHorizontalTextPosition(SwingConstants.CENTER);
		remover.setVerticalAlignment(SwingConstants.TOP);
		remover.setVerticalTextPosition(SwingConstants.BOTTOM);
		remover.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				removerActionPerformed(e);
			}
		});
		remover.setIcon(new
				ImageIcon("src/images/remover.png"));
		remover.setBackground(Color.WHITE);


		voltar.setBounds(600, 10, 90, 70);
		voltar.setHorizontalTextPosition(SwingConstants.CENTER);
		voltar.setVerticalAlignment(SwingConstants.TOP);
		voltar.setVerticalTextPosition(SwingConstants.BOTTOM);
		voltar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				voltarActionPerformed(e);
			}
		});
		voltar.setIcon(new
				ImageIcon("src/images/back2.png"));
		voltar.setBackground(Color.WHITE);


		//cria um table model impedindo a edicao de celulas
		desenho = new DefaultTableModel() {
			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		tabela = new JTable(desenho);
		tabela.setModel(desenho);
		desenho.addColumn("Nome");
		desenho.addColumn("Endereco");
		desenho.addColumn("Data de aniversario");
		desenho.addColumn("Forma de contato");
		desenho.addColumn("Comentario");

		scrollTabela = new JScrollPane(tabela);
		scrollTabela.setBounds(5, 95, 680, 390);

		user = new Usuario();
		//redefineTabela(user.getAgenda().getContatos());

		pane.add(add);
		pane.add(editar);
		pane.add(remover);
		pane.add(voltar);
		pane.add(scrollTabela);

		criaTabela();

		this.add(pane);
	}

	public static void main(String[] args) {
		IContatos c = new IContatos();


	}

	public void addActionPerformed(ActionEvent e) {
		criaContato = new CriaContato(this);
		criaContato.setModal(true);
		criaContato.iniciaJanela();
	}

	public void editarActionPerformed(ActionEvent e) {
		int linha = tabela.getSelectedRow();

		if(linha >= 0) {
			String nome = tabela.getValueAt(linha, 0).toString();
			String endereco = tabela.getValueAt(linha, 1).toString();
			String dataNiver = tabela.getValueAt(linha, 2).toString();
			String formaContato = tabela.getValueAt(linha, 3).toString();
			String descricao = tabela.getValueAt(linha, 4).toString();

			criaContato = new CriaContato(this,tabela.getSelectedRow(),nome,endereco,dataNiver,formaContato,descricao);
			criaContato.setModal(true);
			criaContato.iniciaJanela();
		}
	}

	public void removerActionPerformed(ActionEvent e) {
		int linha = tabela.getSelectedRow();
		int coluna = 0;

		if(linha >= 0) {
			int resposta = JOptionPane.showConfirmDialog(this, "Deseja remover o contato?",
							"Remover",
							JOptionPane.OK_CANCEL_OPTION,
							JOptionPane.QUESTION_MESSAGE);
			if(resposta == JOptionPane.OK_OPTION) {
				String nome = tabela.getValueAt(linha, coluna).toString();
				//user.getAgenda().getContatos().remove(arg0); TODO
				desenho.removeRow(linha);
				JOptionPane.showMessageDialog(this, "Contato removido com sucesso!", nome, JOptionPane.INFORMATION_MESSAGE);
			}
		} else
			JOptionPane.showMessageDialog(this, "Selecione um contato!","",JOptionPane.INFORMATION_MESSAGE);

	}

	public void voltarActionPerformed(ActionEvent e) {
		this.dispose();
	}

	public void criaTabela() {

		ArrayList<Contato> contatoList = user.getAgenda().getContatos();
		Iterator<Contato> it = contatoList.iterator();
		while(it.hasNext()) {
			Contato c = it.next();
			desenho.addRow(new String[] {c.getNome(),
					c.getEndereco(),c.getDataAniversarioFormatada(),
					"","" });
		}
	}

	public void redefineTabela(String[] informacoes) {

		int linha = tabela.getSelectedRow();

		tabela.setValueAt(informacoes[0], linha, 0);
		tabela.setValueAt(informacoes[1], linha, 1);
		tabela.setValueAt(informacoes[2], linha, 2);
		tabela.setValueAt(informacoes[3], linha, 3);
		tabela.setValueAt(informacoes[4], linha, 4);
	}

	public void addRow(Object[] obj){
		desenho.addRow(obj);
		}

}
